package offer.diff;

/**
 * @author DengYuan2
 * @create 2021-03-22 18:52
 */
public class n_15 {
    public static void main(String[] args) {
        n_15 n = new n_15();
        int res = n.NumberOf12(-7);
        System.out.println(res);
    }

    /**
     * 位运算：n&(n-1) 位运算可以将 n 的位级表示中最低的那一位 1 设置为 0。
     *         不断将 1 设置为 0，直到 n 为 0。时间复杂度：O(M)，其中 M 表示 1 的个数
     * @param n
     * @return
     */
    public int NumberOf1(int n) {
        int cnt=0;
        while (n!=0){
            cnt++;
            n&=(n-1);
        }
        return cnt;
    }


    public int NumberOf12(int n) {
        String s = Integer.toBinaryString(n);
        int count=0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i)=='1'){
                count++;
            }
        }
        return count;
    }
}
